package com.bdk.middle.management.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bdk.middle.management.api.query.PermissionAssignQueryDO;
import com.bdk.middle.management.core.entity.RoleEntity;
import com.bdk.middle.management.api.domain.RoleDO;
import com.bdk.middle.management.api.query.RoleQueryDO;
import com.bdk.middle.common.result.ResultDO;

import java.util.List;

/**
 * <p>
 * 角色 服务类
 * </p>
 *
 * @author Reagan
 * @since 2021-01-23
 */
public interface RoleService extends IService<RoleEntity> {

    /**
     * 添加角色
     * @param domain 角色DO
     * @return ResultDO
     */
    ResultDO add(RoleDO domain);

    /**
     * 用户绑定角色
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     * @return
     */
    ResultDO bindRoles(String userId, List<String> roleIds);

    /**
     * 用户解除绑定角色
     * @param userId 用户ID
     * @return
     */
    ResultDO unbindRoles(String userId);
    /**
     * 修改角色信息
     * @param domain 角色DO
     * @return ResultDO
     */
    ResultDO edit(RoleDO domain);

    /**
     * 获取角色详情
     * @param id 角色ID
     * @return ResultDO
     */
    ResultDO get(String id);

    /**
     * 返回用户对应的角色
     * @param userId 用户id
     * @return
     */
    ResultDO getRoleByUserId(String userId);

    /**
     * 返回用户对应的角色 v2
     * @param userId 用户id
     * @return
     */
    ResultDO getRoleByUserId2(String userId);

    /**
     * 删除角色
     * @param id 角色ID
     * @param modifier 修改人名
     * @return ResultDO
     */
    ResultDO remove(String id, String modifier);

    /**
     * 查找角色列表分页
     * @param domain 查询DO
     * @return ResultDO
     */
    ResultDO find(RoleQueryDO domain);

    /**
     * 查找用户角色字符串集合
     * @param sysUserName 系统用户名
     * @return ResultDO
     */
    ResultDO getRolesByUsername(String sysUserName);


    /**
     * 查找用户角色id集合
     * @param sysUserName 系统用户名
     * @return ResultDO
     */
     ResultDO getRoleIdsByUsername(String sysUserName);
    /**
     * 分配单个权限给角色
     * @author chang
     *
     * @param domain
     * @return
     */
    ResultDO assignPermission(PermissionAssignQueryDO domain);

    /**
     * 分配多个权限给角色
     * @author chang
     *
     * @param domain
     * @return
     */
    ResultDO assignMultiPermission(PermissionAssignQueryDO domain);

    /**
     * 获取所有角色
     *  @author chang
     */
    ResultDO getAllRole() ;

    /**
     * 获取用户相关角色列表
     */
    ResultDO getRoleListByUsername(String username) ;

    /**
     * 得到角色字符串
     * @param sysUserId
     * @return
     */
    String getRoleStringByUserId(String sysUserId);

    /**
     * 得到角色名字符串
     * @param sysUserId
     * @return
     */
    String getRoleNamesByUserId(String sysUserId);
    /**
     * 得到角色id
     * @param sysUserId
     * @return
     */
    String getRoleIdByUserId(String sysUserId);

    RoleEntity getRoleByCode(String code);
}
